How To Use Canvas4Z

From Documentation
How To Use Canvas4Z

Author
Simon Pai, Engineer, Potix Corporation
Date
June 8, 2010
Version
ZK 5.0.2, Canvas4Z 0.8.0

What's Canvas4Z

Canvas4Z is an experimental component that uses the power of HTML Canvas to draw various objects on any modern browser, including IE6.

Enlightened by John Scattergood's idea (from Zebra) to connect Canvas to Java 2D API, we've build this new prototype to expand ZK's reach on graphic functionality in the future.

What can be done with Canvas4Z

Before we even introduce what functions Canvas provides, let's see how we can play with it first.

  • Note that even though IE 8 does not natively supports Canvas, you can still play the demo with IE, except that the text drawing function is disabled.

How to use Canvas4Z

Add a Canvas in zul

Like a regular component, in your zul file you can have:

<canvas id="cvs" width="800px" height="500px" />
  • Note that Canvas is always childless.


Prepare Drawable objects

Then, on server side, you can prepare Drawable items like:

// A rectangle at (50,100) with width 200px, height 300px
Drawable rectangle = new Rectangle(50, 100, 200, 300);

// A triangle
Drawable path = new Path().moveTo(50,50).lineTo(100,70).lineTo(70,100).lineTo(50,50).closePath();

// A piece of text at (100, 100)
Drawable text = new Text("ZK Canvas", 100, 100);
  • The API of Rectangle and Path are similar to APIs of java.awt.geom.Rectangle2D and java.awt.geom.Path2D


Operate Drawables on Canvas

You can add, insert, remove, or replace them on Canvas:

Canvas cvs = getFellow("cvs");
cvs.add(rectangle);
cvs.add(path);
cvs.add(1, text);
cvs.remove(0);
cvs.clear();
  • The API is almost identical to Java List API
  • Upon these actions, Canvas will show the changes by drawing/redrawing items on browser accordingly.


Operate Java 2D Shapes on Canvas

And why not just add some Java 2D Shapes directly into Canvas?

cvs.add(new Arc2D.Double(100, 100, 300, 300, 0, 270, Arc2D.PIE));
cvs.add(new RoundRectangle2D.Double(50, 50, 200, 400, 10, 10));


Set drawing attributes on Drawables

Prior to sending drawable items into Canvas, you can specify some drawing attributes on the items:

// sets colors
rectangle.fillStyle("#000080");
rectangle.strokeStyle("#0000FF");

// sets color transparency
rectangle.setAlpha(0.5);

// rotates the shape by setting transformation
rectangle.setTransformation(0.87, 0.5, -0.5, 0.87, 0, 0);

// sets outline width
rectangle.setLineWidth(5);

// sets shadow effect
rectangle.setShadowOffset(10, 10);
rectangle.setShadowColor("#808080");
rectangle.setShadowBlur(5);

// add whatever you want...

cvs.add(rectangle);
  • Almost all attributes defined in HTML 5 Canvas spec are supported (as long as your browser supports it too).


Client side programming

You can do pretty much the same things on client side, too:

var cvs = jq('#cvs');

var rectangle = new zkforge.canvas.Rectangle(50, 50, 100, 100);
rectangle.setFillStyle("#808080");
rectangle.setAlpha(0.5);

cvs.add(rectangle);

Download

Summary

Canvas opens a door to graphics on browser for ZK. By using its server and client side API together you can build many interesting application. Next time we will explore how we built this Paint demo using the concept of client-server fusion.


Ruler.gif



Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.